{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-03-20T14:02:52.349797Z",
     "start_time": "2025-03-20T14:02:52.318008Z"
    }
   },
   "source": [
    "import gym\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from ch16.CEM import CEM\n",
    "from ch16.utils import *\n",
    "# 在utils中已经定义了device，所以这里不用再定义"
   ],
   "outputs": [],
   "execution_count": 10
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-20T14:02:53.864854Z",
     "start_time": "2025-03-20T14:02:53.849048Z"
    }
   },
   "cell_type": "code",
   "source": [
    "class PETS:\n",
    "    '''PETS算法'''\n",
    "    def __init__(self,env,replay_buffer,n_sequence,elite_ratio,plan_horizon,num_episodes):\n",
    "        self._env = env\n",
    "        self._env_pool = replay_buffer\n",
    "\n",
    "        obs_dim = env.observation_space.shape[0]\n",
    "        self._action_dim = env.action_space.shape[0]\n",
    "        self._model = EnsembleDynamicsModel(obs_dim,self._action_dim)\n",
    "        self._fake_env = FakeEnv(self._model)\n",
    "        self.upper_bound = env.action_space.high[0]\n",
    "        self.lower_bound = env.action_space.low[0]\n",
    "\n",
    "        self._cem = CEM(n_sequence,elite_ratio,self._fake_env,self.upper_bound,self.lower_bound)\n",
    "        self.plan_horizon = plan_horizon\n",
    "        self.num_episodes = num_episodes\n",
    "\n",
    "    def train_model(self):\n",
    "        env_samples = self._env_pool.return_all_samples()\n",
    "        obs = env_samples[0]\n",
    "        actions = np.array(env_samples[1])\n",
    "        rewards = np.array(env_samples[2]).reshape(-1,1)\n",
    "        next_obs = env_samples[3]\n",
    "        inputs = np.concatenate((obs,actions),axis=-1)\n",
    "        labels = np.concatenate((rewards,next_obs-obs),axis=-1)\n",
    "        self._model.train(inputs,labels)\n",
    "\n",
    "    def mpc(self):\n",
    "        mean = np.tile((self.upper_bound + self.lower_bound) / 2.0,self.plan_horizon)\n",
    "        var = np.tile(np.square(self.upper_bound - self.lower_bound) / 16,self.plan_horizon)\n",
    "        obs,done,episode_return = self._env.reset(),False,0\n",
    "        while not done:\n",
    "            actions = self._cem.optimize(obs,mean,var)\n",
    "            action = actions[:self._action_dim]  # 选取第一个动作\n",
    "            next_obs,reward,done,_ = self._env.step(action)\n",
    "            self._env_pool.add(obs,action,reward,next_obs,done)\n",
    "            obs = next_obs\n",
    "            episode_return += reward\n",
    "            mean = np.concatenate([np.copy(actions)[self._action_dim:],np.zeros(self._action_dim)])\n",
    "        return episode_return\n",
    "\n",
    "    def explore(self):\n",
    "        obs,done,episode_return = self._env.reset(),False,0\n",
    "        while not done:\n",
    "            action = self._env.action_space.sample()\n",
    "            next_obs,reward,done,_ = self._env.step(action)\n",
    "            self._env_pool.add(obs,action,reward,next_obs,done)\n",
    "            obs = next_obs\n",
    "            episode_return += reward\n",
    "        return episode_return\n",
    "\n",
    "    def train(self):\n",
    "        return_list = []\n",
    "        explore_return = self.explore()  # 先进行随机策略的探索来收集第一条序列的数据\n",
    "        print('episode: 1, return: %d' % explore_return)\n",
    "        return_list.append(explore_return)\n",
    "\n",
    "        for i_episode in range(self.num_episodes-1):\n",
    "            self.train_model()\n",
    "            episode_return = self.mpc()\n",
    "            return_list.append(episode_return)\n",
    "            print('episode: %d, return: %d' % (i_episode+2, episode_return))\n",
    "        return return_list\n"
   ],
   "id": "db3c3b1ebefa76cc",
   "outputs": [],
   "execution_count": 11
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-20T14:07:37.883518Z",
     "start_time": "2025-03-20T14:02:55.845003Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 倒立摆环境测试\n",
    "buffer_size = 100000\n",
    "n_sequence = 50\n",
    "elite_ratio = 0.2\n",
    "plan_horizon = 25\n",
    "num_episodes = 10\n",
    "env_name = 'Pendulum-v0'\n",
    "env = gym.make(env_name)\n",
    "\n",
    "replay_buffer = ReplayBuffer(buffer_size)\n",
    "pets = PETS(env,replay_buffer,n_sequence,elite_ratio,plan_horizon,num_episodes)\n",
    "return_list = pets.train()"
   ],
   "id": "eef8d0e1b0cf5aba",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "episode: 1, return: -1183\n",
      "episode: 2, return: -1247\n",
      "episode: 3, return: -1627\n",
      "episode: 4, return: -1030\n",
      "episode: 5, return: -1027\n",
      "episode: 6, return: -124\n",
      "episode: 7, return: -121\n",
      "episode: 8, return: -259\n",
      "episode: 9, return: -126\n",
      "episode: 10, return: -270\n"
     ]
    }
   ],
   "execution_count": 12
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-20T14:17:19.610591Z",
     "start_time": "2025-03-20T14:17:19.484069Z"
    }
   },
   "cell_type": "code",
   "source": [
    "episodes_list = list(range(len(return_list)))\n",
    "plt.plot(episodes_list,return_list)\n",
    "plt.xlabel('Episodes')\n",
    "plt.ylabel('Returns')\n",
    "plt.title('PETS on {}'.format(env_name))\n",
    "plt.show()"
   ],
   "id": "f795bbffeaf95015",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 14
  },
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": "",
   "id": "e007cc080b34d9a3"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
